package com.wjw.java.others.abstract_;

/**
 * 抽象类：
 * 修饰符 abstract class
 * ----------------------------------------------------------
 * 抽象方法：抽象方法必须在抽象类中,没有方法体,该方法由继承该类的子类去实现
 * 修饰符 abstract 返回值类型 方法名();
 * ----------------------------------------------------------
 * 细节：
 * 1.抽象类不能被实例化
 * 2.抽象类可以有非abstract的方法
 * 3.一旦这个类中有抽象方法,那么这个类就必须声明为抽象类
 * 4.abstract只能修饰类和方法
 * 5.抽象类还是类,可以有任意成员(属性、方法、代码块...)
 * 6.抽象方法不能有方法体
 * 7.如果一个类继承了抽象类,那么该类必须实现抽象类的所有抽象方法，
 *   除非该类也声明为抽象类。
 * 8.抽象方法不能使用private、final、static关键字去修饰
 * ----------------------------------------------------------
 */
public class AbstractClass {
    //Animal animal = new Animal();//抽象类不能实例化
}
//抽象类
abstract class Animal{

    private String name;

    //private abstract int age;//abstract只能修饰类和方法

    public Animal(String name){
        this.name = name;
    }
    //抽象方法
    public abstract void eat();

    public void show(){
        System.out.println("抽象类可以有非abstract的方法");
    }
}
